package com.aaa.system.controller.api;

import com.aaa.system.aop.annotation.Log;
import com.aaa.system.service.RoleService;
import com.aaa.system.vo.RoleVo;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.aaa.entity.Role;
import com.aaa.vo.Result;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * 响应到前端的controller类
 */
@RestController
@RequestMapping("system/api/role")
public class ApiRoleController {

    @Resource
    private RoleService roleService;

    /**
     * 查询所有的角色信息
     * @return 所有的角色信息
     */
    @GetMapping("/list")
    public Result<List<Role>> getInfo(){
        return roleService.getAll();
    }

    /**
     * 根据用户id查询 所有角色信息 和 当前用户拥有的角色信息
     * @param userId  用户id
     * @return 全部角色信息 和 当前用户拥有的角色信息
     */
    @GetMapping("/getByUserId/{userId}")
    public Result<Map<String,Object>> getByUserId(@PathVariable Long userId){
        return roleService.getByUserId(userId);
    }

    /**
     * 用户页面的确认分配角色按钮
     * @param userId 用户的id
     * @param roleIds  要分配的角色id数组
     * @return  操作结果信息
     */
    @Log(title = "确认分配角色",business_type = "2")
    @PostMapping("/confirmRole")
    public Result<String> confirmRole(Long userId,Long[] roleIds){
        return roleService.confirmRole(userId,roleIds);
    }

    /**
     * 分页动态查询所有的角色信息
     * @param current 当前页码
     * @param size  每页显示的数据条数
     * @param roleVo 查询条件对象
     * @return 操作结果信息
     */
    @PostMapping("/list/{current}/{size}")
    public Result<IPage<Role>> getAllRole(
            @PathVariable Integer current,
            @PathVariable Integer size,
            @RequestBody RoleVo roleVo
    ){
       return roleService.getAllRole(current,size,roleVo);
    }

    /**
     * 添加或者修改角色信息
     * @param role 角色对象
     * @return 操作结果信息
     */
    @PostMapping("saveOrUpdateRole")
    @Log(title = "添加/修改角色信息",business_type = "1")
    public Result<Boolean> saveOrUpdateRole(@RequestBody Role role){
        return roleService.saveOrUpdateRole(role);
    }

    /**
     * 根据id删除单个角色
     * @param roleId 角色id
     * @return 操作结果信息
     */
    @DeleteMapping("delRole/{roleId}")
    @Log(title = "删除单个角色",business_type = "3")
    public Result<Long[]> delRole(@PathVariable Long roleId){
        Result<Long[]> delRole = roleService.delRole(roleId);
        return delRole;
    }

    /**
     * 根据角色id批量删除角色信息
     * @param roleIds 角色id数组
     * @return 操作结果信息
     */
    @PostMapping("mulDelRole/{roleIds}")
    @Log(title = "批量删除角色",business_type = "3")
    public Result<ArrayList<Long>> mulDelRole(@PathVariable Long[] roleIds){
        Result<ArrayList<Long>> mulDelRole = roleService.mulDelRole(roleIds);
        return mulDelRole;
    }


}
